#include <iostream>
#include <unistd.h>
#include <signal.h>
#include <sys/wait.h>
//回收多个子进程

void handler(int signo)
{
    std::cout << "signo : " << signo << " pid" << getpid()<< std::endl;
    pid_t id = 0;
    while(id = waitpid(-1, nullptr, WNOHANG) > 0)
    {
        std::cout << id << "回收成功" << std::endl;
    }
}

int main()
{
    // signal(SIGCHLD, handler);
    signal(SIGCHLD, SIG_IGN);
    for(int i = 0; i < 5; i++)
    {
        pid_t id = fork();
        if(id == 0)
        {
            std::cout << "child running pid: " << getpid()<< std::endl;
            sleep(5);
            exit(0);
        }
    }
    while(true)
    {
        std::cout << "parent process running" << std::endl;
        sleep(1);
    }
}



// void handler(int signo)
// {
//     std::cout << "signo: " << signo << std::endl;
// }

// int main()
// {
//     signal(SIGCHLD, handler);
//     pid_t id = fork();
//     if(id == 0)
//     {
//         std::cout << "child :" << getpid() << "is running" << std::endl;
//         sleep(5);
//         exit(0);
//     }
//     sleep(10);
//     wait(nullptr);
// }
